package com.tbit.uqbike.client.dto;

import com.tbit.uqbike.client.validation.IsValidJson;
import lombok.Data;

import javax.validation.constraints.NotBlank;
import javax.validation.constraints.NotNull;
import java.time.LocalDateTime;
import java.time.ZoneId;
import java.time.ZoneOffset;

/**
 * 事件上报请求
 *
 *
 * @author <a href="mailto:chen.chaoxiong@tbit.com.cn">ChenChaoXiong</a>
 * @since 2024/7/2
 */
@Data
public class EventReportDTO {

    /**
     * 订单跟踪号
     */
    @NotBlank
    private String traceId;

    /**
     * 事件类型
     */
    @NotBlank
    private String eventType;

    /**
     * 事件描述
     * 对应 借还车事件定义表格 中的事件结果  中文
     */
    private String eventDesc;


    /**
     * 事件详情(英文)
     * 如果同一个事件类型eventType需要细分，填写具体的事件详情
     * 如 eventType 登录失败时，如果有多种的失败原因，可以填写在这里  用户名错误  密码错误 等
     */
    private String detail;

    /**
     * 事件发生时间
     */
    @NotNull
    private LocalDateTime eventTime;

    /**
     * 设备id
     */
    private Integer machineId;

    /**
     * 用户id
     */
    private Integer userId;

    /**
     * 用户手机号
     */
    private String userPhone;


    /**
     * 订单号
     */
    private String orderNo;


    /**
     * 信息
     * 放一些日志类的信息,如异常等
     */
    private String message;

    /**
     * 业务信息，json格式
     */
    @IsValidJson
    private String businessInfo;

    /**
     * 事件发生时间毫秒
     * @return
     */

    public long getEventTimeMilli() {
        ZoneId zoneId = ZoneId.systemDefault();
        return eventTime.atZone(zoneId).toInstant().toEpochMilli();
    }

}
